const Koa = require('koa');
const logger = require('koa-logger');
const Router = require('koa-router');
const cors = require('@koa/cors');
const compose = require('koa-compose')
const qs = require('qs'); //解析querystring
const app = new Koa();

app.use(logger());//记录日志
app.use(cors());//支持跨域请求

// 主页（非RESTful格式的API）
let routerHome = new Router();
routerHome.get('/', async (ctx, next) => {
    ctx.body = '欢迎欢迎！';
})

// RESTful API
let routerRest = new Router();

//获取指定资源resource的列表
//例如：http://localhost:3000/resource
routerRest.get('/resource', async (ctx, next) => {
    ctx.body = {
        errno: 0,
        errmsg: 'GET API执行成功',
        data: '返回的数据' //这里放回一个数据列表
    };
})

//获取指定ID的资源
//例如：http://localhost:3000/resource/1?name=zengqs&age=18
routerRest.get('/resource/:id', async (ctx, next) => {

    //参数解析示例
    console.log(ctx.params); //{ id: '1' }
    console.log(ctx.querystring);//name=zengqs&age=18
    let obj = qs.parse(ctx.querystring);
    console.log(obj)   //{ name: 'zengqs', age: '18' }

    let id = ctx.params.id;

    ctx.body = {
        errno: 0,
        errmsg: 'GET API执行成功',
        data: '返回的数据' //检索数据库，返回指定id的数据
    };
})

//新增记录，数据通过BODY传递
routerRest.post('/resource', async (ctx, next) => {
    ctx.body = {
        errno: 0,
        errmsg: 'POST API执行成功',
        data: '返回的数据'
    };
})


//删除指定ID的数据
routerRest.delete('/resource/:id', async (ctx, next) => {
    let id = ctx.params.id;

    ctx.body = {
        errno: 0,
        errmsg: 'POST API执行成功',
        data: '返回的数据'
    };
})


//更新指定ID的数据，数据通过BODY传递
routerRest.put('/resource/:id', async (ctx, next) => {
    let id = ctx.params.id;

    ctx.body = {
        errno: 0,
        errmsg: 'POST API执行成功',
        data: '返回的数据'
    };
})

app.use(compose([routerHome.routes(), routerHome.allowedMethods()]))
app.use(compose([routerRest.routes(), routerRest.allowedMethods()]))

//监听3000端口
app.listen(3000, () => {
    console.log('server is running at http://localhost:3000')
});